using System.Threading.Tasks;
using Abp.Application.Services;
using Vecen.BangChuang.Authorization.Accounts.Dto;

namespace Vecen.BangChuang.Authorization.Accounts {

    /// <summary>
    /// 账户操作
    /// </summary>
    public interface IAccountAppService: IApplicationService {
        /// <summary>
        /// 检查推荐人信息是否可用
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<IsRecommendAvailableOutPut> IsRecommendAvailable(IsRecommendAvailableInput input);

        /// <summary>
        /// 检查用户帐号是否可用
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<IsUserAvailableOutPut> IsUserAvailable(IsUserAvailableInput input);

        /// <summary>
        /// 检查租户名称是否可用
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<IsTenantAvailableOutput> IsTenantAvailable(IsTenantAvailableInput input);

        /// <summary>
        /// 注册
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<RegisterOutput> Register(RegisterInput input);


        /// <summary>
        /// 注册
        /// </summary>
        /// <returns></returns>
        Task<RegisterOutput> RegisterAsync(RegisterRequestDto input);

        /// <summary>
        /// /// 发送注册验证码
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task SendValidationCode(SendCodeRequestDto input);


        /// <summary>
        /// 修改密码
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task ChangePasswordAsync(PasswordChangeInput input);
    }
}